﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 02/04/2014
 * Time: 02:33 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;

namespace Gestión_UTN.blimpl
{
    /// <summary>
    /// Description of materiablimpl.
    /// </summary>
    public class materiablimpl : Gestión_UTN.bl.materiabl
    {
        private static Gestión_UTN.da.materiada createMateria = Gestión_UTN.factories.dafactory.createMateria();
        private static Gestión_UTN.bl.carrerabl createCarrera = Gestión_UTN.factories.blfactory.createCarrera();

        public materiablimpl()
        {
        }

        public bool SaveMateria(Gestión_UTN.bo.Materiabo m)
        {
            bool ingresada = false;

            try
            {
                Gestión_UTN.bo.Carrerabo car = (null != m)
                    ? createCarrera.FindCarreraByNombre(m.Carrera)
                    : null;

                ingresada = (null != car)
                    ? createMateria.SaveMateria(m.Nombre, car.Car_id)
                    : false;

            }
            catch (exceptions.daexception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteMateria(Gestión_UTN.bo.Materiabo m)
        {
            bool eliminada = false;

            try
            {
                Gestión_UTN.bo.Carrerabo car = (null != m)
                    ? createCarrera.FindCarreraByNombre(m.Carrera)
                    : null;

                eliminada = (null != car)
                    ? createMateria.DeleteMateria(m.Nombre, car.Car_id)
                    : false;

            }
            catch (exceptions.daexception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyMateria(Gestión_UTN.bo.Materiabo m_anterior, Gestión_UTN.bo.Materiabo m)
        {
            bool modificada = false;

            try
            {
                Gestión_UTN.bo.Carrerabo car = (null != m)
                    ? createCarrera.FindCarreraByNombre(m.Carrera)
                    : null;

                Gestión_UTN.bo.Carrerabo car_anterior = (null != m_anterior)
                    ? createCarrera.FindCarreraByNombre(m_anterior.Carrera)
                    : null;

                modificada = (null != car && null != car_anterior)
                    ? createMateria.ModifyMateria(m_anterior.Nombre, car_anterior.Car_id,
                                                  m.Nombre, car.Car_id)
                    : false;
            }
            catch (exceptions.daexception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllMaterias()
        {
            DataTable tablaMaterias = null;

            try
            {
                tablaMaterias = createMateria.FindAllMaterias();
            }
            catch (exceptions.daexception ex)
            {
                tablaMaterias = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                tablaMaterias = null;
                throw new exceptions.blexception(ex.Message);
            }

            return tablaMaterias;
        }

        public Gestión_UTN.bo.Materiabo FindMateriaByMatId(int mat_id)
        {
            Gestión_UTN.bo.Materiabo materia = null;

            try
            {
                Gestión_UTN.Entities.Materia m = (0 != mat_id)
                    ? createMateria.FindMateriaByMatId(mat_id)
                    : null;

                Gestión_UTN.bo.Carrerabo car = (null != m)
                    ? createCarrera.FindCarreraById(m.Car_id)
                    : null;

                materia = (null != car)
                    ? new Gestión_UTN.bo.Materiabo(m.Id, m.Nombre, car.Nombre)
                    : null;
            }
            catch (exceptions.daexception ex)
            {
                materia = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                materia = null;
                throw new exceptions.blexception(ex.Message);
            }

            return materia;
        }
    }
}
